//"use strict"
//第五章 引用类型
//内置对象

//1.date日期类型
var now = new Date() //基本和as3的使用一样 函数名也一样

printLn(now)

var d = Date.parse('2017/12/19') //返回毫秒数
d = new Date(d)
printLn(d)
function printLn(...args) {
    document.writeln(args,'<br>')
}

//var handler = setTimeout(show_clock,1000)
function show_clock() {
    
    clearTimeout(handler)
    var now = new Date() 
    sp = document.getElementById('clockLabel');
    sp.innerHTML = '时间：'+now.toLocaleTimeString();
    handler = setTimeout(show_clock,1000)
}

//2.RegExp 正则 
//正则表达式字面量始终会共享同一个RegExp 实例，而使用构造函数创建的每一个新RegExp 实例都是新实例
//也就是通过字面量创建的实例如果模式相同只会有一个实例.

var pattern = /^cat.+?co$/;
console.log(pattern.lastIndex);
var s = 'catkongfuco';
var ret = pattern.test(s);
console.log('ret,pattern.lastIndex',ret,pattern.lastIndex)

//了解 exec 方法 ;如果模式有分组得到是匹配的各组数据

var s1 = 'myname 12,is a good 34.how good 56'

var pattern1 =/\d+/g; //设置了 g 全局标志 每次也只是返回一个匹配项(每次返回一个不是第一个)
var m1 = pattern1.exec(s1)
console.log('pattern1 m1=',m1)
//设置全局标志后 可以通过循环找出所有匹配项
while(m1){
    console.log('m1=',m1[0],pattern1.lastIndex) // lastIndex 属性不断变化
    m1 = pattern1.exec(s1)
}

var pattern2 = /\d+/; //不设置全局标志g 每次只返回第一个匹配项 而且 lastindex 属性不变
var m2 = pattern2.exec(s1);
m2 = pattern2.exec(s1);
console.log('pattern2 m2=',m2,'pattern2.lastIndex=',pattern2.lastIndex); //也是只返回一个匹配项

//1.Function对象

//函数内 this 的指向 是指向函数的调用者

function out() {
    inner('out') //相当于window.inner
}
function inner(from) {
    console.log('callee.caller',from,arguments.callee.caller); //调用当前函数的函数(严格模式下无效)
    console.log('this',from,this) //调用当前函数的对象
}
var obj = {inner:inner}
out();// window.out
obj.inner('obj');
//通过函数的 bind 方法设置this作用域
var myInner = inner.bind(obj)

console.log('out.prototype',typeof(out.prototype))
console.log(out.prototype) //原型链是一个不可for-in的属性

//2.基本类型包装;通过字面量创建的是基本类型，但是基本类型也可以通过构造函数创建，这时它是一个引用类型
var s2 = new String()
var s3 = "hello"
console.log(typeof(s2)) //object
console.log(typeof(s3)) //string
var bo1 = new Boolean(false)
var bo2 = true
console.log((bo1 && bo2)) //true

console.log(s3.fontcolor('#ffff00'))

var js = '{"name":"kongfu","age":26}';//json字符串
var jobj = JSON.parse(js)
console.log(jobj) //解析json 
console.log(JSON.stringify(jobj))

//3.Math对象 基本和as3的一样

function getRandom(min,max) {
    var f = Math.random()
    //console.log("f=",f)
    var ret = parseInt(f*(max-min+1)+min)
    return ret
}

console.log(parseInt('10',2)) //把二进制字符串转换成10进制
var n = 2
console.log(n.toString(2))//把10进制转换成二进制
